package com.dayouzi.crawler_monitor.service;


import com.dayouzi.crawler_monitor.pojo.page.PageBean;
import com.dayouzi.crawler_monitor.pojo.query.CrawlerDetailQuery;
import com.dayouzi.crawler_monitor.pojo.query.CrawlerListQuery;
import com.dayouzi.crawler_monitor.pojo.query.ErrorTypeListQuery;
import com.dayouzi.crawler_monitor.pojo.query.HonorListQuery;
import com.dayouzi.crawler_monitor.pojo.vo.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author DaYouZi
 * @since 2023-03-06
 */
public interface CrawlerService {


    /**
     * 分页查询爬虫信息list
     * @param page
     * @param limit
     * @param crawlerListQuery
     * @return
     */
    PageBean<CrawlerListVO> listPage(Integer page, Integer limit, CrawlerListQuery crawlerListQuery);

    /**
     * 获取爬虫详情
     * @param page
     * @param limit
     * @param crawlerDetailQuery
     * @return
     */
    CrawlerDetailVO getCrawlerDetail(Integer page, Integer limit, CrawlerDetailQuery crawlerDetailQuery);

    /**
     * 获取负责人列表
     * @return
     */
    ArrayList<HashMap<String, String>> getPersonList();

    /**
     * 获取爬虫类型列表
     * @return
     */
    ArrayList<HashMap<String,Integer>> getSpiderTypeList();

    /**
     * 获取服务器列表
     * @return
     */
    ArrayList<HashMap<String,String>> getMachineList(String person, Integer spiderType);

    /**
     * 获取项目名称列表
     * @return
     */
    ArrayList<HashMap<String,String>> getProjectNameList(String person, Integer spiderType);

    /**
     * 获取爬虫错误类型和数量预览
     * @param id
     * @return
     */
    ArrayList<CrawlerPreviewVO> getCrawlerPreview(Integer id);

    /**
     * 获取爬虫详情错误列表
     * @return
     */
    ArrayList<HashMap<String,String>> getCrawlerDetailTypes(ErrorTypeListQuery errorTypeListQuery);

    /**
     * 修改错误数据处理状态
     * @param did
     * @param status
     * @return
     */
    int updateStatus(Integer did, Integer status);

    /**
     * 修改负责人
     * @param id
     * @param person
     */
    void updatePerson(Integer id, String person);


    /**
     * 批量处理错误数据的状态
     * @param status
     * @param arr
     */
    void multipleHandle(Integer status, List arr);

    /**
     * 置顶数据
     * @param arr
     */
    void toppingData(Integer userId, List arr);

    /**
     * 取消置顶
     * @param userId
     * @param arr
     */
    void unToppingData(Integer userId, List arr);

    /**
     * 获取爬虫数量
     */
    int getCrawlerCount();

    /**
     * 获取当日爬虫错误数量
     * @return
     */
    int getErrorCrawlerCount();


    void changePdf(Integer id);

    void changePdf2(Integer id);

    /**
     * 更新备注
     * @param id
     * @param remarks
     */
    void updateRemarks(Integer id, String remarks);

    /**
     * 获取定时任务执行情况
     * @param person
     * @return
     */
    ArrayList<ScheduledTaskVO> getScheduledTask(String person);

    /**
     * 绑定定时任务名称
     * @param id
     * @param scheduledName
     */
    Integer updateScheduledName(Integer id, String scheduledName, String machine);

    /**
     * 解绑定时任务名称
     * @param id
     */
    void unupdateScheduledName(Integer id);

    /**
     * 远程联想搜索爬虫名称
     * @param codeName
     * @return
     */
    ArrayList<HashMap> querySearchAsync(String codeName, String person, Integer spiderType);

    /**
     * 分页查询荣耀解析数据
     * @param page
     * @param limit
     * @param honorListQuery
     * @return
     */
    PageBean<HonorListVO> honorListPage(Integer page, Integer limit, HonorListQuery honorListQuery);

    /**
     * 荣耀解析更新处理状态
     * @param id
     * @param status
     */
    void honorUpdateData(Integer id, Integer status);

    /**
     * 荣耀解析批量处理
     * @param status
     * @param arr
     */
    void honorMultipleHandle(Integer status, List arr);

    /**
     * 获取荣耀解析来源list
     * @return
     */
    ArrayList<HashMap<String,String>> honorAuthorList();

    /**
     * 获取荣耀解析奖项list
     * @return
     */
    ArrayList<HashMap<String,String>> honorPrizeList();

    /**
     * 获取企业备案详情信息
     * @param id
     * @return
     */
    CompanyRecordDetailVO getCompanyRecordDetail(Integer id);

    /**
     * 一键忽略选中的类型
     * @param id
     * @param type
     */
    int oneTouchIgnore(Integer id, String type);

    boolean verifiedAuthor(String author);

    ArrayList<HashMap<String, String>> getDropdownList(Integer id);

    void setValid(Integer isValid, List arr);

    CrawlerValidCountVO getCrawlerValidCount(String person);
}
